package negocio.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import negocio.enums.SituacaoMatricula;

@Entity
@Cacheable(false)
public class Matricula implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;

	private Date dtMatricula;
	
	@Enumerated(EnumType.STRING)
	private SituacaoMatricula situacao;
	// ------------------relacionamentos---------------------//
	@ManyToOne
	private Disciplina disciplina;
	
	@ManyToOne
	private Usuario aluno;
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy="aluno")
	private Set<AtividadeAluno> atividadesAluno = new HashSet<AtividadeAluno>();
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy="aluno")
	private Set<ProvaAluno> provasAluno = new HashSet<ProvaAluno>();

	// ------------------gets e sets---------------------//
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Date getDtMatricula() {
		return dtMatricula;
	}

	public void setDtMatricula(Date dtMatricula) {
		this.dtMatricula = dtMatricula;
	}

	public SituacaoMatricula getSituacao() {
		return situacao;
	}

	public void setSituacao(SituacaoMatricula situacao) {
		this.situacao = situacao;
	}

	public Disciplina getDisciplina() {
		return disciplina;
	}

	public void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}

	public Usuario getAluno() {
		return aluno;
	}

	public void setAluno(Usuario aluno) {
		this.aluno = aluno;
	}

	public Set<AtividadeAluno> getAtividadesAluno() {
		return atividadesAluno;
	}

	public void setAtividadesAluno(Set<AtividadeAluno> atividadesAluno) {
		this.atividadesAluno = atividadesAluno;
	}

	public Set<ProvaAluno> getProvasAluno() {
		return provasAluno;
	}

	public void setProvasAluno(Set<ProvaAluno> provasAluno) {
		this.provasAluno = provasAluno;
	}

}
